package com.wanxi.product.core_sevice;

import com.wanxi.product.service.api.dto.SpuTagDto;
import com.wanxi.product.service.api.dto.TagDto;
import com.wanxi.product.service.api.dto.TypeDto;
import com.wanxi.product.service.api.entity.SpuTag;
import com.wanxi.product.service.api.query.admin.TagQuery;
import com.wanxi.product.service.api.query.enterprise.SpuQuery;
import com.wanxi.product.service.api.dto.SpuDto;
import com.wanxi.product.service.api.query.enterprise.SpuTagQuery;
import com.wanxi.product.service.api.query.admin.TypeQuery;

import java.util.List;

public interface SpuService {

    /**
     * 添加spu
     * @param model
     * @return
     */
    Long addSpu(SpuDto model);

    /**
     * 查找所有符合条件的spu
     * @param spuQuery
     * @return
     */
    List<SpuDto> findAllSpu(SpuQuery spuQuery);

    /**
     * 根据id查找对应spu
     * @param spuId
     * @return
     */
    SpuDto findSpuBySpuId(Long spuId);

    /**
     * 修改spu信息
     * @param spuUpdateInDto
     * @return
     */
    Long updateSpu(SpuDto spuUpdateInDto);

    /**
     * 删除相应spu
     * @return
     */
    int deleteSpu(Long spuId);

    /**
     * 添加标签
     * @param model
     * @return
     */
    Long addTag(TagDto model);

    /**
     * 通过Id查找对应标签
     * @param tagId
     * @return
     */
    TagDto findTagByTagId(Long tagId);

    /**
     * 查找全部标签
     * @return
     */
    List<TagDto> findAllTag(TagQuery tagQuery);

    /**
     * 删除相应标签
     * @return
     */
    int deleteTag(Long tagId);

    /**
     * 为SPU添加spu标签关联
     * @param model
     * @return
     */
    Long addSpuTag(SpuTagDto model);

    /**
     * 通过条件查找对应关联
     * @param spuTagQuery
     * @return
     */
    List<SpuTag> findAllSpuTag(SpuTagQuery spuTagQuery);

    /**
     * 根据spuId删除相应spu标签关联
     * @param spuId
     * @return
     */
    int deleteBySpuId(Long spuId);


    /**
     * 添加分类
     * @param model
     * @return
     */
    Long addType(TypeDto model);

    /**
     * 根据id查找分类
     * @param typeId
     * @return
     */
    TypeDto findTypeByTypeId(Long typeId);

    /**
     * 查找所有符合条件的分类
     * @param typeQuery
     * @return
     */
    List<TypeDto> findAllType(TypeQuery typeQuery);

    /**
     * 修改分类信息
     * @param typeUpdateInDto
     * @return
     */
    Long updateType(TypeDto typeUpdateInDto);

    /**
     * 逻辑删除相应分类
     * @return
     */
    int deleteType(Long typeId);
}
